package state.bean;

/**
 * @version 0.2
 */
public class GamePoint {
  public int _x = 0;
  public int _y = 0;

  /**
   * Constructor
   * 
   * @param x - Tọa độ x
   * @param y - Tọa độ y
   */
  public GamePoint(int x, int y) {
    this._x = x;
    this._y = y;
  }

  /**
   * So sánh 2 Point
   * 
   * @param point - Point cần so sánh
   * @return 2 Point cần so sánh có bằng nhau hay không
   */
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }

    if (!obj.getClass().toString().equals(GamePoint.class.toString())) {
      return false;
    }
    GamePoint point = (GamePoint) obj;
    return (_x == point._x) && (_y == point._y);
  }

  /**
   * Thực hiện tạo mới Point hoặc chỉ thay đổi giá trị point đầu vào nếu point đầu vào khác null
   * Hàm này dùng để tránh phải tạo Point mới trong mỗi lần dùng
   * 
   * @param point - Point cần kiểm tra
   * @param x - Tọa độ x thiết lập
   * @param y - Tọa độ y thiết lập
   * @return Point trả ra
   */
  public static GamePoint createNewOrSetValue(GamePoint point, int x, int y) {
    if (point == null) {
      return new GamePoint(x, y);
    } else {
      point._x = x;
      point._y = y;
      return point;
    }
  }

  /**
   * Thực hiện phép cộng tọa độ của 2 Point
   * 
   * @param p1 - Point thứ nhất
   * @param p2 - point thứ hai
   */
  public static GamePoint add(GamePoint p1, GamePoint p2) {
    GamePoint tmp = new GamePoint(0, 0);
    tmp._x = p1._x + p2._x;
    tmp._y = p1._y + p2._y;
    return tmp;
  }
}
